package com.devilvan.betrice.common;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * @Description 日志通知接口
 * @author Evad.Wu
 * @date 2022-07-07
 */
@SuppressWarnings(value = "unused")
public abstract class BetriceAdvice {
    /**
     * 前置通知
     */
    protected void before() {}

    /**
     * JoinPoint适合注解 和 Schema形式
     * 注意：这里的JoinPoint是org.aspectj.lang.JoinPoint ，不是前置通知的JoinPoint
     * @param joinPoint 切入点
     */
    protected void after(JoinPoint joinPoint) {}

    /**
     * 异常通知
     * @param joinPoint 切入点
     * @param e 待捕获异常
     */
    protected void afterThrowing(JoinPoint joinPoint,Exception e) {}

    /**
     * 环绕通知
     * @param proceedingJoinPoint 环绕的方法
     * @return 一般返回环绕的方法
     */
    protected Object around(ProceedingJoinPoint proceedingJoinPoint) {
        Object proceed = null;
        try {
            proceed = proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return proceed;
    }
}
